﻿#!/usr/bin/env python
# -*- coding:utf-8 -*-

'file operation usage'

__authro__='zhaoxp'

import codecs

def file_reader1(filepath):
	try:
		f=open(filepath,'r')
		# 调用read()方法可以一次读取文件的全部内容，Python把内容读到内存，用一个str对象表示
		print f.read()
	except IOError,e:
		print 'IOError',e
	else:
		print 'read successfully'
	finally:
		if f:
			f.close()

def file_reader2(filepath):
	with open(filepath,'r') as f:
		print f.read()
	
def file_reader3(filepath):
	with open(filepath,'r') as f:
		for line in f.readlines():
			print(line.strip())

# 如多调用read方法，那么需要独自处理换行。不像readlines，它已经处理了换行
# 另外还需要注意如果文件太大，应该有相应的处理方法
def file_reader4(filepath):
	buf=10
	ss=""
	with open(filepath,'r') as f:
		s=f.read(buf)
		while(len(s)>0):
			ss+=s
			s=f.read(buf)			
	print ss

# 读取二进制文件的方式	
def file_reader_bin(filepath):
	# 要读取二进制文件，比如图片、视频等等，用'rb'模式打开文件即可
	f=open(filepath,'rb')
	print f.read()
	
# 读取文件并转码
def file_reader_code(filepath,charset):
	# 要读取非ASCII编码的文本文件，就必须以二进制模式打开，再解码。比如GBK编码的文件：
	f=open(filepath,'rb')
	u=f.read().decode(charset)
	print u

# 一种简单的文件读取并转码方式
def file_reader_code2(filepath,charset):
	with codecs.open(filepath,'r',charset) as f:
		f.read()
	
def file_writer1(filepath,data):
	f=open(filepath,'w')
	f.write(data)
	f.close()
	
def file_writer2(filepath,data):
	with open(filepath,'w') as f:
		f.write(data)
	
if __name__=='__main__':
	print 'file operation example'
	file_reader1('d:\\test.txt')
	print '------------------------------'
	file_reader2('d:\\test.txt')
	print '------------------------------'
	file_reader3('d:\\test.txt')
	print '------------------------------'
	file_reader4('d:\\test.txt')
	print '------------------------------'
	print '------------------------------'
	print '------------------------------'
	print '------------------------------'
	print '------------------------------'
